perm filename NSCTPY.F4[MUS,LCS]2 blob
sn#084625 filedate 1974-01-29 generic text, type T, neo UTF8
C ***** NSCTPY JUL 16 71 ****** WRITES ON MAGTAPE OR DSK. NO SCOPE!
C ****** LOAD WITH TAPOUT.REL *********
C TO WRITE ON DSK: BIGBIT←1; OR RCDFLG←1; TO WRITE ON TAPE: BIGBIT←-1;
C BIGBIT←>1; WRITES ON DSK, 4TH LETTER OF NAME IS SET BY NUMBER.
C IF RCDFLG IS NOT 0 OR 1, ONE LONG FILE IS WRITTEN. PLAY WITH 'PLAY'.
SUBROUTINE SMPLS(LSBUF,ISBCNT,IBOTT,MAXAMP,BIGBIT,RCDFLG)
COMMON JSB(10)
DIMENSION MX(3),INM(3),MZ(4),IBOTT(1),MQ(5)
EQUIVALENCE (JSB(3),JSB3),(JSB(4),JSB4),(JSB(5),JSB5)
DATA (MX(JSC),JSC=1,2)/'AMPL.=0 /'/,INM(2)/' AMP='/
DATA (MZ(K),K=1,3)/'ADJUST LSBUF!**'/
DATA JSAVE/33000/
IF(J)GO TO 6
86 K=-1
IEND=-1
LNM=0
NUM=0
IMAX=50000
IF(BIGBIT.EQ.0)GO TO 8
IF(RCDFLG.GT.8000)JSAVE=RCDFLG
RCDFLG=0
C WILL SAVE AFTER C.33K UNLESS RCDFLG>8K
87 IF(BIGBIT.LT.0)GO TO 88
IF(BIGBIT.LT.1)GO TO 8
JSC=BIGBIT-1.
LNM='MUSAA'+256*JSC
BIGBIT=.5
C NAME CHANGE ONLY WORKS WHEN WRITING ON DSK.
J=0
GO TO 87
88 K=0
CC CALL MESS(MZ)
KBIT=2
GO TO 9
8 KBIT=3.-BIGBIT
IF(RCDFLG.GT.1.)RCDFLG=-1.
9 IF(RCDFLG.NE.-1)IBOTT(1024)=0
JSB(2)=KBIT
C KBIT=3, 12-BITS. KBIT=2, 18-BITS. JSB(2) PASSES KBIT TO CONVRT.
IF(J.EQ.1)GO TO 5
JNM='MUSAA'
IF(LNM.NE.0)JNM=LNM
1 INM(1)=JNM
KNM=JNM
J=1
5 IF(INM(1).LE.JNM+50)GO TO 2
JNM=JNM+256
IF(JNM.LE.KNM+6400)GO TO 3
KNM=JNM+26112
JNM=KNM
C RAISES 'AAAZA' TO 'AABAA'
3 INM(1)=JNM
C NAMES GO FROM 'AAAAA' TO 'AAZZZ': MUSAA,MUSAB,MUSAC,ETC.
2 IF(K)GO TO 33
CALL GETTAP
GO TO 34
33 CALL PUTFIL(INM(1))
34 J=-1
JSC=LSBUF
C IF RCDFLG←-1; LSBUF=1024 -- OTHERWISE LSBUF=1023 AND LAST WD(1024) IS AMP.
IF(RCDFLG)GO TO 666
JSC=LSBUF+1
C WRITES LSBUF+1 WDS. THE '+1' WILL HAVE MAXAMP IN LAST BUFFER.
JSB(1)=JSC
JSB3=INM(1)
JSB4=9999
JSB5=9998
IF(K)GO TO 66
CALL TOTAPE(JSB(1),128)
GO TO 6
C666 JSC=1024
666 IMAX=2050
GO TO 6
66 CALL FASTOU(JSB(1),128)
6 IF(ISBCNT.NE.0)GO TO 7
IF(NUM+LSBUF.LT.JSAVE.OR.RCDFLG)GO TO 4
10 IBOTT(JSC)=MAXAMP
IF(MAXAMP.EQ.0)IBOTT(JSC)=1
C IF 0, THEN NO WAY TO FIND END OF FILE IN OTHER PROGS.
5444 IEND=0
GO TO 4
7 IF(RCDFLG)GO TO 5444
IBOTT(LSBUF)=(ISBCNT-1)/KBIT
MAXAMP=-MAXAMP
C LAST WRD OF LSBUF IS USED FOR WDCNT OF FREE SPACE IN LAST BUFFER.
C -MAXAMP TELLS CONVRT IT'S THE LAST BUFFER.
GO TO 10
4 NUM=NUM+LSBUF
IF(MAXAMP.EQ.0)CALL MESS(MX)
CC GO TO 4444
IF(MAXAMP.LT.IMAX)GO TO 4444
C IABS(MAXAMP) WON'T WORK 1ST TIME AROUND!!!!!!!⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
C 49999 IS MAXIMUM AMPL. POSSIBLE (ARBITRARY NUMBER.)
CALL MESS(INM)
CALL MESS(INM)
CALL MESS(INM)
CALL MESS(INM)
CALL PNUM(MAXAMP)
GO TO 227
4444 IF(K)GO TO 44
CALL TOTAPE(IBOTT(1),JSC)
GO TO 45
44 CALL FASTOU(IBOTT(1),JSC)
45 IF(IEND)RETURN
IF(RCDFLG)GO TO 224
22 JSB(1)=-1
JSB3=INM(1)
JSB4=9999
JSB5=9998
IF(K)GO TO 222
CALL TOTAPE(JSB(1),128)
C '-1' MARKS END OF THIS BATCH OF DATA.
C '9999' IDENTIFIES IT AS MUSIC DATA WHEN TAPE IS READ.
CALL FINTAP
CALL BACKSP
CALL BACKSP
GO TO 223
224 K=NUM/LSBUF
J=0
NUM=4-K-(K/4*4)
C MAKES MULTIPLES OF 4K.
J=0
CC IF(NUM.EQ.0)GO TO 2221
2251 DO 225 K=1,1024
225 IBOTT(K)=0
2261 DO 226 K=1,NUM
226 CALL FASTOU(IBOTT(1),LSBUF)
227 CALL FINFIL
GO TO 2221
222 CALL FASTOU(JSB(1),128)
CALL FINFIL
223 J=1
2231 IF(RCDFLG.GE.0)CALL SAVER
JSB(1)=0
2221 CALL MESS(INM)
CALL PNUM(MAXAMP)
INM(1)=INM(1)+2
RETURN
END
C ********** SEG -- *********
SUBROUTINE SEG(FUNC)
C TYPE AMPL, STEP# (UP TO STEP 512). ---- SAME FORMAT AS GEN 1 IN MUSIC5.
DIMENSION FUNC(512),A(4)
COMMON K,STEP,AMP1,AMP2,DIF,IT,IS,ST,STPS,RK
DATA (A(K),K=1,3)/'SEG ARRAY FULL/'/
AMP1=0
ST=0
1 CALL RDNUM(AMP2)
CALL RDNUM(STEP)
IF(STEP.GT.1.)GO TO 3
AMP1=AMP2
GO TO 1
C STEP=1 AND STEP=0 ARE CONSIDERED THE SAME.
3 DIF=AMP2-AMP1
5 IT=ST
IS=STEP*5.120+.0001
STEP=IS
STPS=STEP-ST
IS=STPS
IF(IS+IT.GT.512)GO TO 6
ST=STEP
IF(ST.EQ.0)STEP=1.
DO 2 K=1,IS
CC M=K+IT
RK=K
2 FUNC(K+IT)=AMP1+DIF*RK/STPS
AMP1=AMP2
ST=STEP
CC CALL PNUM(M)
IF(STEP.LT.512)GO TO 1
CC IF(STEP.GT.513.)GO TO 6
1102 CALL MESS(A)
CC*** WHY WAS THIS HERE???? FUNC(1)=0.0
RETURN
6 K=1
8 CALL RDNUM(RK)
7 FUNC(K)=RK
K=K+1
IF(K.LE.512)GO TO 8
GO TO 1102
END
SUBROUTINE SYNTH (FUNC)
C AFTER 'SYNTH(F1);' TYPE 99= TO USE H,A,P,K: ALL OTHER
C NUMBERS = H,A ONLY. TYPE 999 TO END. NORMALIZATION IS AUTOMATIC.
DIMENSION FUNC(512),F(5)
COMMON I,XX,X,H,K,CON,XK,FAC,AMP,Y
DATA (F(I),I=1,4)/'SYNTH ARRAY FULL/'/
DO 15 I=1,512
15 FUNC(I)=0.0
CALL RDNUM(XX)
IF(XX.EQ.99)XX=-99
FAC=360./512.
H=XX
IF(XX)CALL RDNUM(H)
16 CALL RDNUM(AMP)
IF(XX)GO TO 1016
X=0
CON=0
GO TO 2016
1016 CALL RDNUM(X)
X=X*512./360.+1.0
CALL RDNUM(CON)
2016 DO 17 J=1,512
XK=SIND(X*FAC)*AMP+CON
IF(CON.LT.100.0)GO TO 1
FUNC(J)=(XK-100.)*FUNC(J)
GO TO 2
1 FUNC(J)=FUNC(J)+XK
2 X=X+H
IF(X.LE.512.)GO TO 17
X=X-512.
17 CONTINUE
CALL RDNUM(H)
IF(H.NE.999.)GO TO 16
2200 X=FUNC(1)
DO 19 I=2,512
H=ABS(FUNC(I))
19 IF(X.LT.H)X=H
DO 20 I=1,512
20 FUNC(I)=FUNC(I)/X
CALL MESS(F)
RETURN
END
C *********** DUR2 1969 *********
FUNCTION DUR(P2,SPEED,CHNS)
COMMON P,ISR,NC,IDUR,ID,IP(5)
DATA IP/20000,25000,10000,50000,100000/
P=P2
ISPD=SPEED
NC=CHNS*30+.3
3 IDUR=P*10000+.5
5 IDUR=(IDUR*IP(ISPD))/1000
6 ID=IDUR/NC
7 ID=IDUR-ID*NC
IF(ID.EQ.0)GO TO 1
P=P+.0001
GO TO 3
1 DUR=P
RETURN
END
SUBROUTINE SEE(FUNC)
DIMENSION FUNC(512),SU(150),C(3)
DATA (C(I),I=1,2)/'0=CLEAR: '/
CC CALL DDCLR
C THIS VERSION MUST BE LOADED WITH %LTVRLIB (FOR 'DDCLR')
CC CALL TYPLOC(-300,-512)
CALL DPYSET(2,SU,150)
CC CALL DPYBRT(6)
CALL ALINE(-264,0,256,0)
CALL ALINE(-256,-256,-256,256)
CALL AIVECT(0,0)
1 IY=FUNC(1)*256.0
CALL AIVECT(-256,IY)
DO 14 I=2,512,3
IY2=FUNC(I)*256.0
CALL RVECT(3,IY2-IY)
14 IY=IY2
CALL DPYOUT(2)
100 CALL MESS(C)
1100 CALL RDNUM(X)
CALL DPYCLR
RETURN
END
FUNCTION POWER(X,Y)
POWER=EXP(Y*ALOG(X))
RETURN
END